package mc.util;

import java.lang.reflect.Field;
import java.util.Date;

import mc.domain.Pacjent;

public class CheckFieldsValues {

	

	/**
	 * Metoda sprawdza czy wszystkie pola okreslonego typu przekazywanego obiektu maja wartosc null
	 * @author blazej
	 * @param obiekt - obiekt do sprawdzenia
	 * @param klasa - typ pol do sprawdzenia
	 * @return <li><code>true</code> jesli wszystkie wybrane pola sa nullami</li>
	 * 		   <li><code>false</code> jesli ktorekolwiek pole ma wartosc rozna od null</li>
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public static boolean hasAllNullValues(Object obiekt,Class klasa) throws IllegalArgumentException, IllegalAccessException{
		
		Field[] pola=obiekt.getClass().getDeclaredFields();

		for(int i=0;i<pola.length;i++){
			
			if(pola[i].getType()==klasa){
				pola[i].setAccessible(true);
				if(pola[i].get(obiekt)!=null)
					return false;
			}
			
		}
		
		
		return true;
	}
	
	
	/**
	 * Metoda sprawdza czy wszystkie pola typu String przekazywanego obiektu maja wartosc null
	 * @author blazej
	 * @param obiekt - obiekt do sprawdzenia
	 * @return <li><code>true</code> jesli wszystkie pola typu String sa nullami</li>
	 * 		   <li><code>false</code> jesli ktorekolwiek pole typu String ma wartosc rozna od null</li>
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public static boolean hasAllNullStringValues(Object obiekt) throws IllegalArgumentException, IllegalAccessException{
		
		Field[] pola=obiekt.getClass().getDeclaredFields();

		for(int i=0;i<pola.length;i++){
			
			if(pola[i].getType()==String.class||pola[i].getType()==java.util.Date.class||pola[i].getType()==Integer.class||pola[i].getType()==Double.class){
				pola[i].setAccessible(true);
				if(pola[i].get(obiekt)!=null)
					return false;
			}
			
		}
		
		return true;
	}
	
	
	public static void main(String[] args){
		
		Pacjent p=new Pacjent();
		p.setDataurodzenia(new Date());
		
		try {
			
			System.out.println(hasAllNullValues(p,String.class));
			System.out.println(hasAllNullStringValues(p));
			
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	
	
	
	
	
}
